package br.com.fox.iebav.session;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.enterprise.context.SessionScoped;
import javax.faces.application.FacesMessage;
import javax.faces.model.SelectItem;
import javax.inject.Named;

import br.com.fox.iebav.controller.command.SalvarItens;
import br.com.fox.iebav.dao.LoteDAO;
import br.com.fox.iebav.dao.SubFamiliaDAO;
import br.com.fox.iebav.dao.UnidadeMedidaDAO;
import br.com.fox.iebav.entity.Itens;
import br.com.fox.iebav.entity.Lotes;
import br.com.fox.iebav.entity.Subfamilias;
import br.com.fox.iebav.entity.Unidadesmedida;
import br.com.fox.iebav.session.abstractsession.AbstractSession;

@Named("itemBeanSession")
@SessionScoped
public class ItemBeanSession extends AbstractSession implements Serializable {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
//	ATRIBUTOS
	private List<Itens> itensList;
	private Itens itemSelecionado;
	private List<SelectItem> unidadeMedidaList,subFamiliaList,loteList;
	
	private @EJB SubFamiliaDAO subFamiliaDAO;
	private @EJB UnidadeMedidaDAO unidadeMedidaDAO;
	private @EJB LoteDAO loteDAO;
	
//	CONTROLLER COMMAND
	private @EJB SalvarItens salvarItens;
	private Map<String, Object> resultMap;
	
	
	@PostConstruct
	public void init()
	{
		setItemSelecionado(new Itens());
		carregarItens();
		redirecionarURL("itens.java");
	}		
	
	public void carregarItens()
	{
		setItensList( salvarItens.getItemDAO().findAll() );
	}
	
	public void carregarUnidadesMedida()
	{
		setUnidadeMedidaList(new ArrayList<SelectItem>());
		List<Unidadesmedida> l = unidadeMedidaDAO.findAll();
		for(Unidadesmedida s : l)
			getUnidadeMedidaList().add(new SelectItem(s,s.getNome()));
	}
	
	public void carregarSubFamilias()
	{
		setSubFamiliaList(new ArrayList<SelectItem>());
		List<Subfamilias> l = subFamiliaDAO.findAll();
		for(Subfamilias s : l)
			getSubFamiliaList().add(new SelectItem(s,s.getDescricao()));
	}
	
	public void carregarLotes()
	{
		setLoteList(new ArrayList<SelectItem>());
		List<Lotes> l = loteDAO.findAll();
		for(Lotes s : l)
			getLoteList().add(new SelectItem(s,s.getNome()));
	}
	
	public void abrirItemSelecionado()
	{
		carregarSubFamilias();
		carregarUnidadesMedida();
		carregarLotes();
		redirecionarURL("itemPersistencia.java");
	}
	
	public void novoItem()
	{
		setItemSelecionado(new Itens());
		redirecionarURL("itemPersistencia.java");
	}
	
	public void salvarItem()
	{
		resultMap = salvarItens.execute(getItemSelecionado());
		if( ( (Boolean) resultMap.get("resultado") ) )
			facesMensagens(FacesMessage.SEVERITY_INFO,((String)resultMap.get("mensagem")),"");
		else
			facesMensagens(FacesMessage.SEVERITY_ERROR,((String)resultMap.get("mensagem")),"");
		carregarItens();
	}

	public List<Itens> getItensList() {
		return itensList;
	}

	public void setItensList(List<Itens> itensList) {
		this.itensList = itensList;
	}

	public Itens getItemSelecionado() {
		return itemSelecionado;
	}

	public void setItemSelecionado(Itens itemSelecionado) {
		this.itemSelecionado = itemSelecionado;
	}

	public List<SelectItem> getUnidadeMedidaList() {
		return unidadeMedidaList;
	}

	public void setUnidadeMedidaList(List<SelectItem> unidadeMedidaList) {
		this.unidadeMedidaList = unidadeMedidaList;
	}

	public List<SelectItem> getSubFamiliaList() {
		return subFamiliaList;
	}

	public void setSubFamiliaList(List<SelectItem> subFamiliaList) {
		this.subFamiliaList = subFamiliaList;
	}

	public List<SelectItem> getLoteList() {
		return loteList;
	}

	public void setLoteList(List<SelectItem> loteList) {
		this.loteList = loteList;
	}

}
